package org.aug.demo.jvm.classpath.impl;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Collectors;

//是结尾通配符的类路径，它实际上也就是 CompositeEntry，所以可以直接继承CompositeEntry
public class WildcardEntry extends CompositeEntry{
    public WildcardEntry(String path) {
        super(toPathList(path));
    }

    private static String toPathList(String wildcardPath) {
        String baseDir = wildcardPath.replace("*", "");
        try {
            /*将遍历 baseDir 下所有文件，挑选出 jar 包，拼接成字符串之后返回；
            在构造中这个字符串传递给父类构造，实际上这个过程就是将通配符转换为多个有效路径。
            */
            return Files.walk(Paths.get(baseDir))
                    .filter(Files::isRegularFile)
                    .map(Path::toString)
                    .filter(p -> p.endsWith(".jar") || p.endsWith(".JAR"))
                    .collect(Collectors.joining(File.pathSeparator));
        } catch (IOException e) {
            return "";
        }
    }
}
